{
 "cells": [
  {
   "cell_type": "code",
   "execution_count": 161,
   "id": "114dd8c1-d211-4d46-8c43-d56535be1f2e",
   "metadata": {},
   "outputs": [],
   "source": [
    "import pandas as pd\n",
    "import numpy as np\n",
    "import matplotlib.pyplot as plt\n",
    "import seaborn as sns\n",
    "from sklearn.preprocessing import LabelEncoder, StandardScaler\n",
    "import warnings\n",
    "from sklearn.ensemble import RandomForestClassifier\n",
    "from sklearn.metrics import accuracy_score, confusion_matrix, classification_report\n",
    "from sklearn.model_selection import train_test_split\n",
    "\n",
    "train = pd.read_csv('train_data.csv')\n",
    "test = pd.read_csv('test_data.csv')"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 162,
   "id": "0ee029da-a743-4954-b4c2-3730e6dc51c5",
   "metadata": {},
   "outputs": [],
   "source": [
    "# 读取测试集的结果文件\n",
    "test_result = pd.read_csv('submission.csv')"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 163,
   "id": "10ed4ad4-efa8-49d0-bc25-47c1917d584b",
   "metadata": {},
   "outputs": [],
   "source": [
    "# 设置中文字体\n",
    "plt.rcParams[\"font.family\"] = [\"SimHei\"]"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 164,
   "id": "289248f1-143f-444f-afc6-ba63f8d7db91",
   "metadata": {},
   "outputs": [],
   "source": [
    "# 忽略警告信息\n",
    "warnings.filterwarnings(\"ignore\")"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "5af886e1-9ac0-43ac-bb51-85303897f03c",
   "metadata": {
    "tags": [],
    "toc-hr-collapsed": true
   },
   "source": [
    "# 模型选择"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "c3ec597a-b2f6-4e54-a660-3d97e26dca67",
   "metadata": {},
   "source": [
    "根据数据分析结论，数据类型属于离散型数据，且特征之间存在相关性。考虑到树模型在处理离散型数据时具有天然优势，能够有效处理特征间的非线性关系，同时随机森林在处理相关性特征时可以通过特征抽样和梯度提升机制降低过拟合风险，因此选用这随机森林模型对测试数据进行预测。"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "5a142553-5693-44b8-9120-42ccf88f22e3",
   "metadata": {
    "tags": [],
    "toc-hr-collapsed": true
   },
   "source": [
    "# 建立随机森林模型"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "f2b16138-b672-40e2-b66e-90a09e20e961",
   "metadata": {},
   "source": [
    "## 未选取合适的特征向量作预测"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 165,
   "id": "0c1a7d3d-215c-4870-9843-5871d70c4b34",
   "metadata": {},
   "outputs": [],
   "source": [
    "X_train = train.drop(['id', 'subscribe'], axis=1)\n",
    "y_train = train['subscribe']"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 166,
   "id": "4ef077e1-728b-437e-a948-fcd9bae45121",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<style>#sk-container-id-15 {color: black;background-color: white;}#sk-container-id-15 pre{padding: 0;}#sk-container-id-15 div.sk-toggleable {background-color: white;}#sk-container-id-15 label.sk-toggleable__label {cursor: pointer;display: block;width: 100%;margin-bottom: 0;padding: 0.3em;box-sizing: border-box;text-align: center;}#sk-container-id-15 label.sk-toggleable__label-arrow:before {content: \"▸\";float: left;margin-right: 0.25em;color: #696969;}#sk-container-id-15 label.sk-toggleable__label-arrow:hover:before {color: black;}#sk-container-id-15 div.sk-estimator:hover label.sk-toggleable__label-arrow:before {color: black;}#sk-container-id-15 div.sk-toggleable__content {max-height: 0;max-width: 0;overflow: hidden;text-align: left;background-color: #f0f8ff;}#sk-container-id-15 div.sk-toggleable__content pre {margin: 0.2em;color: black;border-radius: 0.25em;background-color: #f0f8ff;}#sk-container-id-15 input.sk-toggleable__control:checked~div.sk-toggleable__content {max-height: 200px;max-width: 100%;overflow: auto;}#sk-container-id-15 input.sk-toggleable__control:checked~label.sk-toggleable__label-arrow:before {content: \"▾\";}#sk-container-id-15 div.sk-estimator input.sk-toggleable__control:checked~label.sk-toggleable__label {background-color: #d4ebff;}#sk-container-id-15 div.sk-label input.sk-toggleable__control:checked~label.sk-toggleable__label {background-color: #d4ebff;}#sk-container-id-15 input.sk-hidden--visually {border: 0;clip: rect(1px 1px 1px 1px);clip: rect(1px, 1px, 1px, 1px);height: 1px;margin: -1px;overflow: hidden;padding: 0;position: absolute;width: 1px;}#sk-container-id-15 div.sk-estimator {font-family: monospace;background-color: #f0f8ff;border: 1px dotted black;border-radius: 0.25em;box-sizing: border-box;margin-bottom: 0.5em;}#sk-container-id-15 div.sk-estimator:hover {background-color: #d4ebff;}#sk-container-id-15 div.sk-parallel-item::after {content: \"\";width: 100%;border-bottom: 1px solid gray;flex-grow: 1;}#sk-container-id-15 div.sk-label:hover label.sk-toggleable__label {background-color: #d4ebff;}#sk-container-id-15 div.sk-serial::before {content: \"\";position: absolute;border-left: 1px solid gray;box-sizing: border-box;top: 0;bottom: 0;left: 50%;z-index: 0;}#sk-container-id-15 div.sk-serial {display: flex;flex-direction: column;align-items: center;background-color: white;padding-right: 0.2em;padding-left: 0.2em;position: relative;}#sk-container-id-15 div.sk-item {position: relative;z-index: 1;}#sk-container-id-15 div.sk-parallel {display: flex;align-items: stretch;justify-content: center;background-color: white;position: relative;}#sk-container-id-15 div.sk-item::before, #sk-container-id-15 div.sk-parallel-item::before {content: \"\";position: absolute;border-left: 1px solid gray;box-sizing: border-box;top: 0;bottom: 0;left: 50%;z-index: -1;}#sk-container-id-15 div.sk-parallel-item {display: flex;flex-direction: column;z-index: 1;position: relative;background-color: white;}#sk-container-id-15 div.sk-parallel-item:first-child::after {align-self: flex-end;width: 50%;}#sk-container-id-15 div.sk-parallel-item:last-child::after {align-self: flex-start;width: 50%;}#sk-container-id-15 div.sk-parallel-item:only-child::after {width: 0;}#sk-container-id-15 div.sk-dashed-wrapped {border: 1px dashed gray;margin: 0 0.4em 0.5em 0.4em;box-sizing: border-box;padding-bottom: 0.4em;background-color: white;}#sk-container-id-15 div.sk-label label {font-family: monospace;font-weight: bold;display: inline-block;line-height: 1.2em;}#sk-container-id-15 div.sk-label-container {text-align: center;}#sk-container-id-15 div.sk-container {/* jupyter's `normalize.less` sets `[hidden] { display: none; }` but bootstrap.min.css set `[hidden] { display: none !important; }` so we also need the `!important` here to be able to override the default hidden behavior on the sphinx rendered scikit-learn.org. See: https://github.com/scikit-learn/scikit-learn/issues/21755 */display: inline-block !important;position: relative;}#sk-container-id-15 div.sk-text-repr-fallback {display: none;}</style><div id=\"sk-container-id-15\" class=\"sk-top-container\"><div class=\"sk-text-repr-fallback\"><pre>RandomForestClassifier(random_state=42)</pre><b>In a Jupyter environment, please rerun this cell to show the HTML representation or trust the notebook. <br />On GitHub, the HTML representation is unable to render, please try loading this page with nbviewer.org.</b></div><div class=\"sk-container\" hidden><div class=\"sk-item\"><div class=\"sk-estimator sk-toggleable\"><input class=\"sk-toggleable__control sk-hidden--visually\" id=\"sk-estimator-id-15\" type=\"checkbox\" checked><label for=\"sk-estimator-id-15\" class=\"sk-toggleable__label sk-toggleable__label-arrow\">RandomForestClassifier</label><div class=\"sk-toggleable__content\"><pre>RandomForestClassifier(random_state=42)</pre></div></div></div></div></div>"
      ],
      "text/plain": [
       "RandomForestClassifier(random_state=42)"
      ]
     },
     "execution_count": 166,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "# 构建随机森林模型\n",
    "rf_model = RandomForestClassifier(random_state=42)\n",
    "rf_model.fit(X_train, y_train)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 167,
   "id": "0b598142-21c8-4ee1-b1b5-1f943c729712",
   "metadata": {},
   "outputs": [],
   "source": [
    "# 使用测试集进行预测\n",
    "test_X = test.drop('id', axis=1)\n",
    "rf_pred_test1 = rf_model.predict(test_X)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 168,
   "id": "ae617291-806f-44d2-a51c-c754137aaf7b",
   "metadata": {},
   "outputs": [],
   "source": [
    "# 将预测标签转换为对应的字符串形式（假设 0 对应 'no'，1 对应 'yes'）\n",
    "rf_pred_test1 = ['no' if x == 0 else 'yes' for x in rf_pred_test1]"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 169,
   "id": "d65250a9-a722-4686-b65b-1710e1a5925e",
   "metadata": {},
   "outputs": [],
   "source": [
    "# 计算随机森林模型在测试集上的准确率\n",
    "rf_accuracy_test1 = accuracy_score(test_result['subscribe'], rf_pred_test1)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 170,
   "id": "4b155bd2-d40e-49d3-b1fb-f6e746334710",
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "随机森林模型在测试集上的准确率：0.9358666666666666\n"
     ]
    }
   ],
   "source": [
    "print(f'随机森林模型在测试集上的准确率：{rf_accuracy_test1}')"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 171,
   "id": "76e01c60-e610-4b13-9b3e-8d8f372bac38",
   "metadata": {},
   "outputs": [],
   "source": [
    "# 计算混淆矩阵\n",
    "rf_cm1 = confusion_matrix(test_result['subscribe'], rf_pred_test1, labels=['no', 'yes'])"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 172,
   "id": "7b6160ca-6669-47cc-974a-b743a0adde51",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 432x288 with 2 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "# 绘制随机森林模型的混淆矩阵\n",
    "plt.figure(figsize=(6, 4))\n",
    "sns.heatmap(rf_cm1, annot=True, fmt='d', cmap='Blues')\n",
    "plt.title('随机森林模型混淆矩阵')\n",
    "plt.xlabel('预测标签')\n",
    "plt.ylabel('真实标签')\n",
    "plt.show()"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "79c60ce1-3839-4aac-a2e5-51c21a29aa37",
   "metadata": {},
   "source": [
    "## 选取合适的特征向量作预测"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 173,
   "id": "a3fd1974-dbc1-44fc-ab34-c27133af6c69",
   "metadata": {},
   "outputs": [],
   "source": [
    "selected_features = ['age', 'job', 'education', 'default', 'month', 'day_of_week',\n",
    "                'duration', 'campaign', 'previous', 'poutcome',\n",
    "                'cons_price_index', 'cons_conf_index', \n",
    "                'lending_rate3m', 'nr_employed']"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 174,
   "id": "b6d925c7-1449-4ea4-b463-e584bfe7ff16",
   "metadata": {},
   "outputs": [],
   "source": [
    "X_train_selected = train[selected_features]\n",
    "y_train = train['subscribe']"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 175,
   "id": "5f67c631-7ae3-42ed-baf4-3d056aa147a7",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<style>#sk-container-id-16 {color: black;background-color: white;}#sk-container-id-16 pre{padding: 0;}#sk-container-id-16 div.sk-toggleable {background-color: white;}#sk-container-id-16 label.sk-toggleable__label {cursor: pointer;display: block;width: 100%;margin-bottom: 0;padding: 0.3em;box-sizing: border-box;text-align: center;}#sk-container-id-16 label.sk-toggleable__label-arrow:before {content: \"▸\";float: left;margin-right: 0.25em;color: #696969;}#sk-container-id-16 label.sk-toggleable__label-arrow:hover:before {color: black;}#sk-container-id-16 div.sk-estimator:hover label.sk-toggleable__label-arrow:before {color: black;}#sk-container-id-16 div.sk-toggleable__content {max-height: 0;max-width: 0;overflow: hidden;text-align: left;background-color: #f0f8ff;}#sk-container-id-16 div.sk-toggleable__content pre {margin: 0.2em;color: black;border-radius: 0.25em;background-color: #f0f8ff;}#sk-container-id-16 input.sk-toggleable__control:checked~div.sk-toggleable__content {max-height: 200px;max-width: 100%;overflow: auto;}#sk-container-id-16 input.sk-toggleable__control:checked~label.sk-toggleable__label-arrow:before {content: \"▾\";}#sk-container-id-16 div.sk-estimator input.sk-toggleable__control:checked~label.sk-toggleable__label {background-color: #d4ebff;}#sk-container-id-16 div.sk-label input.sk-toggleable__control:checked~label.sk-toggleable__label {background-color: #d4ebff;}#sk-container-id-16 input.sk-hidden--visually {border: 0;clip: rect(1px 1px 1px 1px);clip: rect(1px, 1px, 1px, 1px);height: 1px;margin: -1px;overflow: hidden;padding: 0;position: absolute;width: 1px;}#sk-container-id-16 div.sk-estimator {font-family: monospace;background-color: #f0f8ff;border: 1px dotted black;border-radius: 0.25em;box-sizing: border-box;margin-bottom: 0.5em;}#sk-container-id-16 div.sk-estimator:hover {background-color: #d4ebff;}#sk-container-id-16 div.sk-parallel-item::after {content: \"\";width: 100%;border-bottom: 1px solid gray;flex-grow: 1;}#sk-container-id-16 div.sk-label:hover label.sk-toggleable__label {background-color: #d4ebff;}#sk-container-id-16 div.sk-serial::before {content: \"\";position: absolute;border-left: 1px solid gray;box-sizing: border-box;top: 0;bottom: 0;left: 50%;z-index: 0;}#sk-container-id-16 div.sk-serial {display: flex;flex-direction: column;align-items: center;background-color: white;padding-right: 0.2em;padding-left: 0.2em;position: relative;}#sk-container-id-16 div.sk-item {position: relative;z-index: 1;}#sk-container-id-16 div.sk-parallel {display: flex;align-items: stretch;justify-content: center;background-color: white;position: relative;}#sk-container-id-16 div.sk-item::before, #sk-container-id-16 div.sk-parallel-item::before {content: \"\";position: absolute;border-left: 1px solid gray;box-sizing: border-box;top: 0;bottom: 0;left: 50%;z-index: -1;}#sk-container-id-16 div.sk-parallel-item {display: flex;flex-direction: column;z-index: 1;position: relative;background-color: white;}#sk-container-id-16 div.sk-parallel-item:first-child::after {align-self: flex-end;width: 50%;}#sk-container-id-16 div.sk-parallel-item:last-child::after {align-self: flex-start;width: 50%;}#sk-container-id-16 div.sk-parallel-item:only-child::after {width: 0;}#sk-container-id-16 div.sk-dashed-wrapped {border: 1px dashed gray;margin: 0 0.4em 0.5em 0.4em;box-sizing: border-box;padding-bottom: 0.4em;background-color: white;}#sk-container-id-16 div.sk-label label {font-family: monospace;font-weight: bold;display: inline-block;line-height: 1.2em;}#sk-container-id-16 div.sk-label-container {text-align: center;}#sk-container-id-16 div.sk-container {/* jupyter's `normalize.less` sets `[hidden] { display: none; }` but bootstrap.min.css set `[hidden] { display: none !important; }` so we also need the `!important` here to be able to override the default hidden behavior on the sphinx rendered scikit-learn.org. See: https://github.com/scikit-learn/scikit-learn/issues/21755 */display: inline-block !important;position: relative;}#sk-container-id-16 div.sk-text-repr-fallback {display: none;}</style><div id=\"sk-container-id-16\" class=\"sk-top-container\"><div class=\"sk-text-repr-fallback\"><pre>RandomForestClassifier(random_state=42)</pre><b>In a Jupyter environment, please rerun this cell to show the HTML representation or trust the notebook. <br />On GitHub, the HTML representation is unable to render, please try loading this page with nbviewer.org.</b></div><div class=\"sk-container\" hidden><div class=\"sk-item\"><div class=\"sk-estimator sk-toggleable\"><input class=\"sk-toggleable__control sk-hidden--visually\" id=\"sk-estimator-id-16\" type=\"checkbox\" checked><label for=\"sk-estimator-id-16\" class=\"sk-toggleable__label sk-toggleable__label-arrow\">RandomForestClassifier</label><div class=\"sk-toggleable__content\"><pre>RandomForestClassifier(random_state=42)</pre></div></div></div></div></div>"
      ],
      "text/plain": [
       "RandomForestClassifier(random_state=42)"
      ]
     },
     "execution_count": 175,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "# 构建随机森林模型\n",
    "rf_model = RandomForestClassifier(random_state=42)\n",
    "rf_model.fit(X_train_selected, y_train)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 176,
   "id": "eae34b64-f70a-452c-96fd-aaed5b95692e",
   "metadata": {},
   "outputs": [],
   "source": [
    "# 使用测试集进行预测\n",
    "test_X = test[selected_features]\n",
    "rf_pred_test2 = rf_model.predict(test_X)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 177,
   "id": "b35a45f8-f8f0-4198-b6d1-df111e4fbf02",
   "metadata": {},
   "outputs": [],
   "source": [
    "# 将预测标签转换为对应的字符串形式（假设 0 对应 'no'，1 对应 'yes'）\n",
    "rf_pred_test2 = ['no' if x == 0 else 'yes' for x in rf_pred_test2]"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 178,
   "id": "0860e7e7-de64-4a68-942b-c7613256c5b8",
   "metadata": {},
   "outputs": [],
   "source": [
    "# 计算随机森林模型在测试集上的准确率\n",
    "rf_accuracy_test2 = accuracy_score(test_result['subscribe'], rf_pred_test2)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 179,
   "id": "f77d9007-cbc1-457e-ae39-688bae254dbe",
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "随机森林模型在测试集上的准确率：0.9493333333333334\n"
     ]
    }
   ],
   "source": [
    "print(f'随机森林模型在测试集上的准确率：{rf_accuracy_test2}')"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 180,
   "id": "077fdde0-598d-4f87-9995-9ed3a4b0061b",
   "metadata": {},
   "outputs": [],
   "source": [
    "# 计算混淆矩阵\n",
    "rf_cm2 = confusion_matrix(test_result['subscribe'], rf_pred_test2, labels=['no', 'yes'])"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 181,
   "id": "f2c344f6-b373-4bb5-8556-0677fa4e5c34",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 432x288 with 2 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "# 绘制随机森林模型的混淆矩阵\n",
    "rf_cm2 = confusion_matrix(test_result['subscribe'], rf_pred_test2, labels=['no', 'yes'])\n",
    "plt.figure(figsize=(6, 4))\n",
    "sns.heatmap(rf_cm2, annot=True, fmt='d', cmap='Blues')\n",
    "plt.title('随机森林模型混淆矩阵')\n",
    "plt.xlabel('预测标签')\n",
    "plt.ylabel('真实标签')\n",
    "plt.show()"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "ee889c16-73ff-4ef9-b108-3e701c7953e9",
   "metadata": {},
   "source": [
    "## 选取购买意愿最相关的特征作预测"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 182,
   "id": "e0f963d4-6815-4b3f-8fc5-599966eed9a0",
   "metadata": {},
   "outputs": [],
   "source": [
    "selected1_features = ['age', 'job', 'default', 'campaign', 'poutcome']"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 183,
   "id": "d144fbd0-191b-4685-9c92-157bae8bcdcf",
   "metadata": {},
   "outputs": [],
   "source": [
    "X_train_selected1 = train[selected1_features]\n",
    "y_train = train['subscribe']"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 184,
   "id": "39859c95-3222-4279-a5ba-864bf395644b",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<style>#sk-container-id-17 {color: black;background-color: white;}#sk-container-id-17 pre{padding: 0;}#sk-container-id-17 div.sk-toggleable {background-color: white;}#sk-container-id-17 label.sk-toggleable__label {cursor: pointer;display: block;width: 100%;margin-bottom: 0;padding: 0.3em;box-sizing: border-box;text-align: center;}#sk-container-id-17 label.sk-toggleable__label-arrow:before {content: \"▸\";float: left;margin-right: 0.25em;color: #696969;}#sk-container-id-17 label.sk-toggleable__label-arrow:hover:before {color: black;}#sk-container-id-17 div.sk-estimator:hover label.sk-toggleable__label-arrow:before {color: black;}#sk-container-id-17 div.sk-toggleable__content {max-height: 0;max-width: 0;overflow: hidden;text-align: left;background-color: #f0f8ff;}#sk-container-id-17 div.sk-toggleable__content pre {margin: 0.2em;color: black;border-radius: 0.25em;background-color: #f0f8ff;}#sk-container-id-17 input.sk-toggleable__control:checked~div.sk-toggleable__content {max-height: 200px;max-width: 100%;overflow: auto;}#sk-container-id-17 input.sk-toggleable__control:checked~label.sk-toggleable__label-arrow:before {content: \"▾\";}#sk-container-id-17 div.sk-estimator input.sk-toggleable__control:checked~label.sk-toggleable__label {background-color: #d4ebff;}#sk-container-id-17 div.sk-label input.sk-toggleable__control:checked~label.sk-toggleable__label {background-color: #d4ebff;}#sk-container-id-17 input.sk-hidden--visually {border: 0;clip: rect(1px 1px 1px 1px);clip: rect(1px, 1px, 1px, 1px);height: 1px;margin: -1px;overflow: hidden;padding: 0;position: absolute;width: 1px;}#sk-container-id-17 div.sk-estimator {font-family: monospace;background-color: #f0f8ff;border: 1px dotted black;border-radius: 0.25em;box-sizing: border-box;margin-bottom: 0.5em;}#sk-container-id-17 div.sk-estimator:hover {background-color: #d4ebff;}#sk-container-id-17 div.sk-parallel-item::after {content: \"\";width: 100%;border-bottom: 1px solid gray;flex-grow: 1;}#sk-container-id-17 div.sk-label:hover label.sk-toggleable__label {background-color: #d4ebff;}#sk-container-id-17 div.sk-serial::before {content: \"\";position: absolute;border-left: 1px solid gray;box-sizing: border-box;top: 0;bottom: 0;left: 50%;z-index: 0;}#sk-container-id-17 div.sk-serial {display: flex;flex-direction: column;align-items: center;background-color: white;padding-right: 0.2em;padding-left: 0.2em;position: relative;}#sk-container-id-17 div.sk-item {position: relative;z-index: 1;}#sk-container-id-17 div.sk-parallel {display: flex;align-items: stretch;justify-content: center;background-color: white;position: relative;}#sk-container-id-17 div.sk-item::before, #sk-container-id-17 div.sk-parallel-item::before {content: \"\";position: absolute;border-left: 1px solid gray;box-sizing: border-box;top: 0;bottom: 0;left: 50%;z-index: -1;}#sk-container-id-17 div.sk-parallel-item {display: flex;flex-direction: column;z-index: 1;position: relative;background-color: white;}#sk-container-id-17 div.sk-parallel-item:first-child::after {align-self: flex-end;width: 50%;}#sk-container-id-17 div.sk-parallel-item:last-child::after {align-self: flex-start;width: 50%;}#sk-container-id-17 div.sk-parallel-item:only-child::after {width: 0;}#sk-container-id-17 div.sk-dashed-wrapped {border: 1px dashed gray;margin: 0 0.4em 0.5em 0.4em;box-sizing: border-box;padding-bottom: 0.4em;background-color: white;}#sk-container-id-17 div.sk-label label {font-family: monospace;font-weight: bold;display: inline-block;line-height: 1.2em;}#sk-container-id-17 div.sk-label-container {text-align: center;}#sk-container-id-17 div.sk-container {/* jupyter's `normalize.less` sets `[hidden] { display: none; }` but bootstrap.min.css set `[hidden] { display: none !important; }` so we also need the `!important` here to be able to override the default hidden behavior on the sphinx rendered scikit-learn.org. See: https://github.com/scikit-learn/scikit-learn/issues/21755 */display: inline-block !important;position: relative;}#sk-container-id-17 div.sk-text-repr-fallback {display: none;}</style><div id=\"sk-container-id-17\" class=\"sk-top-container\"><div class=\"sk-text-repr-fallback\"><pre>RandomForestClassifier(random_state=42)</pre><b>In a Jupyter environment, please rerun this cell to show the HTML representation or trust the notebook. <br />On GitHub, the HTML representation is unable to render, please try loading this page with nbviewer.org.</b></div><div class=\"sk-container\" hidden><div class=\"sk-item\"><div class=\"sk-estimator sk-toggleable\"><input class=\"sk-toggleable__control sk-hidden--visually\" id=\"sk-estimator-id-17\" type=\"checkbox\" checked><label for=\"sk-estimator-id-17\" class=\"sk-toggleable__label sk-toggleable__label-arrow\">RandomForestClassifier</label><div class=\"sk-toggleable__content\"><pre>RandomForestClassifier(random_state=42)</pre></div></div></div></div></div>"
      ],
      "text/plain": [
       "RandomForestClassifier(random_state=42)"
      ]
     },
     "execution_count": 184,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "# 构建随机森林模型\n",
    "rf_model = RandomForestClassifier(random_state=42)\n",
    "rf_model.fit(X_train_selected1, y_train)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 185,
   "id": "a8abda9a-b876-4e84-9ac4-17ba492999da",
   "metadata": {},
   "outputs": [],
   "source": [
    "# 使用测试集进行预测\n",
    "test_X = test[selected1_features]\n",
    "rf_pred_test3 = rf_model.predict(test_X)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 186,
   "id": "6de9dea0-7160-45ba-9d6b-8fb1b2fd1c78",
   "metadata": {},
   "outputs": [],
   "source": [
    "# 将预测标签转换为对应的字符串形式（假设 0 对应 'no'，1 对应 'yes'）\n",
    "rf_pred_test3 = ['no' if x == 0 else 'yes' for x in rf_pred_test3]"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 187,
   "id": "10094181-54eb-4e78-948a-282bcd725214",
   "metadata": {},
   "outputs": [],
   "source": [
    "# 计算随机森林模型在测试集上的准确率\n",
    "rf_accuracy_test3 = accuracy_score(test_result['subscribe'], rf_pred_test3)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 188,
   "id": "1d55bc94-291b-4916-a552-4ed8d4b34f99",
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "随机森林模型在测试集上的准确率：0.942\n"
     ]
    }
   ],
   "source": [
    "print(f'随机森林模型在测试集上的准确率：{rf_accuracy_test3}')"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 189,
   "id": "3501c503-8b66-46d1-b78a-099e161f0f88",
   "metadata": {},
   "outputs": [],
   "source": [
    "# 计算混淆矩阵\n",
    "rf_cm3 = confusion_matrix(test_result['subscribe'], rf_pred_test2, labels=['no', 'yes'])"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 190,
   "id": "948371fc-2630-4650-97ec-1696bccbf75b",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 432x288 with 2 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "# 绘制随机森林模型的混淆矩阵\n",
    "plt.figure(figsize=(6, 4))\n",
    "sns.heatmap(rf_cm3, annot=True, fmt='d', cmap='Blues')\n",
    "plt.title('随机森林模型混淆矩阵')\n",
    "plt.xlabel('预测标签')\n",
    "plt.ylabel('真实标签')\n",
    "plt.show()"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "9f81b766-6fcb-4231-8a77-94a0051796d1",
   "metadata": {
    "toc-hr-collapsed": true
   },
   "source": [
    "# 模型评估\n",
    "首先未筛选与购买意愿合适的特征时，预测的准确率在0.9358，选用合适的特征作预测时，准确率在0.9493，而在使用与购买意愿相关性强的几个特征作预测，准确率相比选用合适特征下降了0.073，选用准确率较高的方法即选用合适的特征作预测的方法对模型进行评估。"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 191,
   "id": "a21ab817-b0c1-48fb-b24a-69f5a9c1fccf",
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "              precision    recall  f1-score   support\n",
      "\n",
      "          no       1.00      0.95      0.97      7500\n",
      "         yes       0.00      0.00      0.00         0\n",
      "\n",
      "    accuracy                           0.95      7500\n",
      "   macro avg       0.50      0.47      0.49      7500\n",
      "weighted avg       1.00      0.95      0.97      7500\n",
      "\n"
     ]
    }
   ],
   "source": [
    "# 生成评估报告\n",
    "class_report_rf = classification_report(test_result['subscribe'], rf_pred_test2)\n",
    "print(class_report_rf)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 192,
   "id": "4b2740c1-88f6-4acf-9b68-d206550d00e0",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "0.0    19548\n",
       "1.0     2952\n",
       "Name: subscribe, dtype: int64"
      ]
     },
     "execution_count": 192,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "subscribe_counts = train['subscribe'].value_counts()\n",
    "subscribe_counts"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "be696649-d2f5-420a-a63b-47f7f71ce07b",
   "metadata": {
    "jp-MarkdownHeadingCollapsed": true,
    "tags": []
   },
   "source": [
    "### 总结\n",
    "根据生成的评估报告可知，树模型在对“no”这个标签的预测准确率可达100%，召回率可达95%,说明模型在负例上表现优秀，但存在一个问题，测试集中缺乏正例而无法评估其对正例的预测能力，在训练集中其负例和正例的占比也相差过大，出现样本不均衡现象，所以我们需要解决这个问题，否则模型在真实场景中可能无法识别正例。接下来我们将采用人工干涉的方式，再次对模型进行训练和对数据进行预测。"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "fa3d04e1-3bc1-499d-9f51-4688c1cddff7",
   "metadata": {
    "tags": [],
    "toc-hr-collapsed": true
   },
   "source": [
    "# 人为干涉\n",
    "将train数据集分为train训练数据集和val验证数据集，并且设置subscribe的比例为yes : no = 1 : 3"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 193,
   "id": "97f9decb-dcab-409e-80b7-8bc0b627b612",
   "metadata": {},
   "outputs": [],
   "source": [
    "# 提取 yes 和 no 的数据\n",
    "yes_data = train[train['subscribe'] == 1.0]\n",
    "no_data = train[train['subscribe'] == 0.0]"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 194,
   "id": "280ed3ec-368e-4115-907c-1ea93e71fa9c",
   "metadata": {},
   "outputs": [],
   "source": [
    "# 按照 1:3 的比例提取所需的数据\n",
    "sample_data = no_data.sample(n = (len(yes_data) * 3), random_state = 42)\n",
    "data = pd.concat([sample_data, yes_data])"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 195,
   "id": "4afbe5a4-e94c-481b-9c20-4291ca277c85",
   "metadata": {},
   "outputs": [],
   "source": [
    "# 划分训练集和验证集\n",
    "train_data, val_data = train_test_split(data, test_size=0.4, random_state=42)"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "fdbf0c18-7f50-468d-877d-53aceef23437",
   "metadata": {},
   "source": [
    "## 模型训练"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 196,
   "id": "102bbb84-8043-4407-922f-7a237fe2a7ea",
   "metadata": {},
   "outputs": [],
   "source": [
    "# 划分特征和目标变量\n",
    "X_train = train_data[selected_features]\n",
    "y_train = train_data['subscribe']\n",
    "X_val = val_data[selected_features]\n",
    "y_val = val_data['subscribe']"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 197,
   "id": "60b7fe22-6985-4300-8558-fc2fae7fe657",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<style>#sk-container-id-18 {color: black;background-color: white;}#sk-container-id-18 pre{padding: 0;}#sk-container-id-18 div.sk-toggleable {background-color: white;}#sk-container-id-18 label.sk-toggleable__label {cursor: pointer;display: block;width: 100%;margin-bottom: 0;padding: 0.3em;box-sizing: border-box;text-align: center;}#sk-container-id-18 label.sk-toggleable__label-arrow:before {content: \"▸\";float: left;margin-right: 0.25em;color: #696969;}#sk-container-id-18 label.sk-toggleable__label-arrow:hover:before {color: black;}#sk-container-id-18 div.sk-estimator:hover label.sk-toggleable__label-arrow:before {color: black;}#sk-container-id-18 div.sk-toggleable__content {max-height: 0;max-width: 0;overflow: hidden;text-align: left;background-color: #f0f8ff;}#sk-container-id-18 div.sk-toggleable__content pre {margin: 0.2em;color: black;border-radius: 0.25em;background-color: #f0f8ff;}#sk-container-id-18 input.sk-toggleable__control:checked~div.sk-toggleable__content {max-height: 200px;max-width: 100%;overflow: auto;}#sk-container-id-18 input.sk-toggleable__control:checked~label.sk-toggleable__label-arrow:before {content: \"▾\";}#sk-container-id-18 div.sk-estimator input.sk-toggleable__control:checked~label.sk-toggleable__label {background-color: #d4ebff;}#sk-container-id-18 div.sk-label input.sk-toggleable__control:checked~label.sk-toggleable__label {background-color: #d4ebff;}#sk-container-id-18 input.sk-hidden--visually {border: 0;clip: rect(1px 1px 1px 1px);clip: rect(1px, 1px, 1px, 1px);height: 1px;margin: -1px;overflow: hidden;padding: 0;position: absolute;width: 1px;}#sk-container-id-18 div.sk-estimator {font-family: monospace;background-color: #f0f8ff;border: 1px dotted black;border-radius: 0.25em;box-sizing: border-box;margin-bottom: 0.5em;}#sk-container-id-18 div.sk-estimator:hover {background-color: #d4ebff;}#sk-container-id-18 div.sk-parallel-item::after {content: \"\";width: 100%;border-bottom: 1px solid gray;flex-grow: 1;}#sk-container-id-18 div.sk-label:hover label.sk-toggleable__label {background-color: #d4ebff;}#sk-container-id-18 div.sk-serial::before {content: \"\";position: absolute;border-left: 1px solid gray;box-sizing: border-box;top: 0;bottom: 0;left: 50%;z-index: 0;}#sk-container-id-18 div.sk-serial {display: flex;flex-direction: column;align-items: center;background-color: white;padding-right: 0.2em;padding-left: 0.2em;position: relative;}#sk-container-id-18 div.sk-item {position: relative;z-index: 1;}#sk-container-id-18 div.sk-parallel {display: flex;align-items: stretch;justify-content: center;background-color: white;position: relative;}#sk-container-id-18 div.sk-item::before, #sk-container-id-18 div.sk-parallel-item::before {content: \"\";position: absolute;border-left: 1px solid gray;box-sizing: border-box;top: 0;bottom: 0;left: 50%;z-index: -1;}#sk-container-id-18 div.sk-parallel-item {display: flex;flex-direction: column;z-index: 1;position: relative;background-color: white;}#sk-container-id-18 div.sk-parallel-item:first-child::after {align-self: flex-end;width: 50%;}#sk-container-id-18 div.sk-parallel-item:last-child::after {align-self: flex-start;width: 50%;}#sk-container-id-18 div.sk-parallel-item:only-child::after {width: 0;}#sk-container-id-18 div.sk-dashed-wrapped {border: 1px dashed gray;margin: 0 0.4em 0.5em 0.4em;box-sizing: border-box;padding-bottom: 0.4em;background-color: white;}#sk-container-id-18 div.sk-label label {font-family: monospace;font-weight: bold;display: inline-block;line-height: 1.2em;}#sk-container-id-18 div.sk-label-container {text-align: center;}#sk-container-id-18 div.sk-container {/* jupyter's `normalize.less` sets `[hidden] { display: none; }` but bootstrap.min.css set `[hidden] { display: none !important; }` so we also need the `!important` here to be able to override the default hidden behavior on the sphinx rendered scikit-learn.org. See: https://github.com/scikit-learn/scikit-learn/issues/21755 */display: inline-block !important;position: relative;}#sk-container-id-18 div.sk-text-repr-fallback {display: none;}</style><div id=\"sk-container-id-18\" class=\"sk-top-container\"><div class=\"sk-text-repr-fallback\"><pre>RandomForestClassifier(random_state=42)</pre><b>In a Jupyter environment, please rerun this cell to show the HTML representation or trust the notebook. <br />On GitHub, the HTML representation is unable to render, please try loading this page with nbviewer.org.</b></div><div class=\"sk-container\" hidden><div class=\"sk-item\"><div class=\"sk-estimator sk-toggleable\"><input class=\"sk-toggleable__control sk-hidden--visually\" id=\"sk-estimator-id-18\" type=\"checkbox\" checked><label for=\"sk-estimator-id-18\" class=\"sk-toggleable__label sk-toggleable__label-arrow\">RandomForestClassifier</label><div class=\"sk-toggleable__content\"><pre>RandomForestClassifier(random_state=42)</pre></div></div></div></div></div>"
      ],
      "text/plain": [
       "RandomForestClassifier(random_state=42)"
      ]
     },
     "execution_count": 197,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "# 构建并训练随机森林模型\n",
    "rf_model = RandomForestClassifier(random_state=42)\n",
    "rf_model.fit(X_train, y_train)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 198,
   "id": "0ff8ad04-c619-47c3-9ff2-770a42527246",
   "metadata": {},
   "outputs": [],
   "source": [
    "# 在验证集上进行预测\n",
    "rf_pred = rf_model.predict(X_val)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 199,
   "id": "fd558bb8-813c-4dc7-9a43-3f027d09f0ca",
   "metadata": {},
   "outputs": [],
   "source": [
    "# 计算随机森林模型的准确率\n",
    "rf_accuracy = accuracy_score(y_val, rf_pred)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 200,
   "id": "104949a0-ff03-4642-b3d9-8f54002f00b1",
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "随机森林模型准确率：0.8259949195596952\n"
     ]
    }
   ],
   "source": [
    "# 打印模型准确率\n",
    "print(f'随机森林模型准确率：{rf_accuracy}')"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 201,
   "id": "1d74b94f-b3b3-4e2e-9da4-b49ff11b0e59",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 432x288 with 2 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "# 绘制随机森林模型的混淆矩阵\n",
    "rf_cm = confusion_matrix(y_val, rf_pred)\n",
    "plt.figure(figsize=(6, 4))\n",
    "sns.heatmap(rf_cm, annot=True, fmt='d', cmap='Blues')\n",
    "plt.title('随机森林模型混淆矩阵')\n",
    "plt.xlabel('预测标签')\n",
    "plt.ylabel('真实标签')\n",
    "plt.show()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 202,
   "id": "3f74784a-860b-47f4-8723-dba36dae31ba",
   "metadata": {
    "tags": []
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "              precision    recall  f1-score   support\n",
      "\n",
      "         0.0       0.85      0.94      0.89      3549\n",
      "         1.0       0.72      0.49      0.58      1175\n",
      "\n",
      "    accuracy                           0.83      4724\n",
      "   macro avg       0.78      0.71      0.74      4724\n",
      "weighted avg       0.82      0.83      0.81      4724\n",
      "\n"
     ]
    }
   ],
   "source": [
    "# 生成随机森林模型的分类报告\n",
    "rf_class_report = classification_report(y_val, rf_pred)\n",
    "print(rf_class_report)"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "cb0326ca-429a-4d4f-a9e5-714b088eaa4e",
   "metadata": {},
   "source": [
    "## 总结\n",
    "在进行人为干涉后模型准确率在 83% 左右，相比之前无正例时的准确率降低了 12% ，但对于正例的预测准确率达到了 72% ，相比之下有较大的提升，且更符合实际情况。这是因为在实际场景中，正例样本往往具有重要的业务价值，虽然整体准确率略有下降，但正例预测能力的提升使得模型在实际应用中更具实用价值。"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "3ab6ab0a-e54c-4411-a1bc-773d732a942b",
   "metadata": {
    "toc-hr-collapsed": true
   },
   "source": [
    "# 模型优化\n",
    "常见影响模型准确性的因素有 树的数量 n_estimators、类权重 class_weight、样本本身等。以下对上面的树的数量、树的深度、类权重进行尝试调整："
   ]
  },
  {
   "cell_type": "markdown",
   "id": "e27f0c25-7c55-41ee-9356-5fa276a949d9",
   "metadata": {},
   "source": [
    "## 树的数量\n",
    "森林中树的数量越多，模型通常能更好的泛化，但是计算成本也会增加，同时可能导致过拟合。以下从10到200步长为10来验证模型正确率。"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 203,
   "id": "cfdce4a2-bbe3-4ac3-b71e-abb641b403c3",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 720x432 with 1 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "n_estimators_range = range(10, 200, 10)\n",
    "accuracy_scores = []\n",
    "\n",
    "for n in n_estimators_range:\n",
    "    rf_model = RandomForestClassifier(n_estimators=n, random_state=42)\n",
    "    rf_model.fit(X_train, y_train)\n",
    "    y_pred = rf_model.predict(X_val)\n",
    "    accuracy = accuracy_score(y_val, y_pred)\n",
    "    accuracy_scores.append(accuracy)\n",
    "\n",
    "# 绘制曲线\n",
    "plt.figure(figsize=(10, 6))\n",
    "plt.plot(n_estimators_range, accuracy_scores, 'o-')\n",
    "plt.xlabel('树的数量 (n_estimators)')\n",
    "plt.ylabel('验证集准确率')\n",
    "plt.title('随机森林性能随树数量的变化')\n",
    "plt.grid(True)\n",
    "plt.show()"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "20da0bc0-2aee-4083-bd08-7f8d14b4567b",
   "metadata": {},
   "source": [
    "### 总结\n",
    "当树的数量达到160时候，模型以及接近收敛，后续增加树的数量对预测结果影响极小，所以继续增加树的数量不会带来显著提升。"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "6a7475a2-3427-4e6a-946e-25180d084dc0",
   "metadata": {},
   "source": [
    "## 树的深度\n",
    "树的最大深度是影响随机森林性能的重要超参数，需合理调优。并非深度越大模型效果越好，需结合验证集表现找到较优深度。以下通过遍历 max_depth 取值（10 到 19，步长 1 ），训练不同深度的随机森林模型，在验证集（X_val、y_val ）上计算准确率，绘制深度与准确率的关系曲线。"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 204,
   "id": "6a71b3f7-8585-4af2-acb8-b8cec97fb945",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 720x432 with 1 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "max_depth_range = range(10, 20, 1)\n",
    "accuracy_scores = []\n",
    "\n",
    "for i in max_depth_range:\n",
    "    rf_model = RandomForestClassifier(max_depth=i, random_state=42)\n",
    "    rf_model.fit(X_train, y_train)\n",
    "    y_pred = rf_model.predict(X_val)\n",
    "    accuracy = accuracy_score(y_val, y_pred)\n",
    "    accuracy_scores.append(accuracy)\n",
    "\n",
    "# 绘制max_depth对准确率的影响曲线\n",
    "plt.figure(figsize=(10, 6))\n",
    "plt.plot(max_depth_range, accuracy_scores, 'o-')  # 使用max_depth_range作为x轴\n",
    "plt.xlabel('树的最大深度 (max_depth)')\n",
    "plt.ylabel('验证集准确率')\n",
    "plt.title('随机森林性能随树的最大深度的变化')\n",
    "plt.grid(True)\n",
    "plt.show()"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "83cd37f9-ae92-4e44-b565-70ca136ba0f2",
   "metadata": {},
   "source": [
    "### 总结\n",
    "准确率随树深度变化并非单调，呈现波动。比如深度 11 时准确率较低，15 时达相对峰值，说明过深或过浅的树结构，都可能影响模型对验证集的预测效果。"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "23faca60-6388-457a-b02f-69e7bac3f762",
   "metadata": {},
   "source": [
    "## 类权重\n",
    "在应对类别分布不均衡的数据集时，调整类别权重是一种有效的策略。通过为少数类分配更高权重，能引导模型在训练过程中更重视少数类样本，增强对其的识别能力，这种方式与本次需提升正例（少数类）预测表现的场景适配性良好，可助力优化模型对不平衡数据的处理效果。非常适用于本次模型预测情况。"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 205,
   "id": "8dbecb15-dfe5-47d6-b099-16792af87d7d",
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "              precision    recall  f1-score   support\n",
      "\n",
      "         0.0       0.83      0.95      0.89      3549\n",
      "         1.0       0.74      0.43      0.54      1175\n",
      "\n",
      "    accuracy                           0.82      4724\n",
      "   macro avg       0.79      0.69      0.72      4724\n",
      "weighted avg       0.81      0.82      0.80      4724\n",
      "\n"
     ]
    }
   ],
   "source": [
    "rf_model = RandomForestClassifier(class_weight='balanced', random_state=42)\n",
    "rf_model.fit(X_train, y_train)\n",
    "y_pred = rf_model.predict(X_val)\n",
    "class_report_rf = classification_report(y_val, y_pred)\n",
    "print(class_report_rf)"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "22301990-87fb-4bfe-b624-e4542eeca7bb",
   "metadata": {
    "toc-hr-collapsed": true
   },
   "source": [
    "# 优化后的模型评估"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 207,
   "id": "53cbbbe5-35e4-4df4-9289-b79b9fae1ff2",
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "              precision    recall  f1-score   support\n",
      "\n",
      "         0.0       0.86      0.91      0.89      3549\n",
      "         1.0       0.68      0.54      0.60      1175\n",
      "\n",
      "    accuracy                           0.82      4724\n",
      "   macro avg       0.77      0.73      0.74      4724\n",
      "weighted avg       0.81      0.82      0.82      4724\n",
      "\n"
     ]
    }
   ],
   "source": [
    "rf_model = RandomForestClassifier(n_estimators=160, max_depth=15, class_weight='balanced', random_state=42)\n",
    "rf_model.fit(X_train, y_train)\n",
    "y_pred = rf_model.predict(X_val)\n",
    "class_report_rf = classification_report(y_val, y_pred)\n",
    "print(class_report_rf)"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "1f8d4113-a893-461e-89af-c7eb31d53c94",
   "metadata": {
    "tags": []
   },
   "source": [
    "## 总结\n",
    "1. 类别层面（0.0 类、1.0 类）\n",
    "    0.0 类（多数类，样本多）：修正后 precision（精确率）从 0.85→0.86 微升，recall（召回率）从 0.94→0.91 微降，f1 - score 保持 0.89 ，整体对多数类的预测精准度略提、召回能力微降，平衡度稳定。\n",
    "    1.0 类（少数类，样本少）：修正后 precision 从 0.72→0.68 微降，recall 从 0.49→0.54 提升，f1 - score 从 0.58→0.60 微增。对少数类的 “召回能力”（抓出真实正例的能力）增强，分类平衡度改善。\n",
    "2. 整体指标\n",
    "    accuracy（准确率）：修正后从 0.83→0.82 微降，全局预测正确样本占比略减，但更关注类别平衡。\n",
    "    macro avg（宏平均）：precision、recall、f1 - score 的宏平均更均衡（如 recall 从 0.71→0.73 ），体现修正后模型对两类的综合识别能力更一致。\n",
    "    weighted avg（加权平均）：因受样本数量权重影响，precision、recall、f1 - score 均微降（如 0.82→0.81 等 ），但整体趋势反映模型优化了类别平衡，适当牺牲了加权性能。\n",
    "3. 核心结论\n",
    "    修正后模型对少数类（1.0 类）的召回率提升，增强了对真实正例的识别；虽全局准确率微降，但类别间的分类公平性（尤其是少数类）和宏平均指标更优，说明修正有效改善了模型对不同类别样本的区分能力，减少了类别不平衡带来的偏差。"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "id": "f96feb09-e9c6-49b8-b6a1-b4ffcb791e5b",
   "metadata": {},
   "outputs": [],
   "source": []
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "id": "bb77ade0-04f0-4c12-a7a6-6466ca311894",
   "metadata": {},
   "outputs": [],
   "source": []
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "id": "dece5996-2628-4f17-b0fd-a376ce195071",
   "metadata": {},
   "outputs": [],
   "source": []
  }
 ],
 "metadata": {
  "kernelspec": {
   "display_name": "Python 3 (ipykernel)",
   "language": "python",
   "name": "python3"
  },
  "language_info": {
   "codemirror_mode": {
    "name": "ipython",
    "version": 3
   },
   "file_extension": ".py",
   "mimetype": "text/x-python",
   "name": "python",
   "nbconvert_exporter": "python",
   "pygments_lexer": "ipython3",
   "version": "3.9.7"
  },
  "toc-showcode": false
 },
 "nbformat": 4,
 "nbformat_minor": 5
}
